/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidades;

import java.sql.SQLException;
import java.util.*;
import Conexion.AccesoADatos;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class Persona {

    private String apellido;
    private String nombre;
    private ArrayList<Telefono> telefonos;
    private int nroDoc;
    private TipoDoc tipoDoc;
    private String estadoCivil;
    private String nroCalle;
    private String calle;
    private String sexo;
    private Barrio barrio;
    private String fechaNacimiento;
    private String email;
    private Usuario usuario;

    public Persona() {
    }

    public Persona(String apellido, String nombre, int nroDoc, TipoDoc tipoDoc, String estadoCivil, String nroCalle, String calle, String sexo, String fechaNacimiento, String email) {
        this.apellido = apellido;
        this.nombre = nombre;
        this.telefonos = new ArrayList<Telefono>();
        this.nroDoc = nroDoc;
        this.tipoDoc = tipoDoc;
        this.estadoCivil = estadoCivil;
        this.nroCalle = nroCalle;
        this.calle = calle;
        this.sexo = sexo;
        this.fechaNacimiento = fechaNacimiento;
        this.email = email;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public Barrio getBarrio() {
        return barrio;
    }

    public void setBarrio(Barrio barrio) {
        this.barrio = barrio;
    }

    public String getCalle() {
        return calle;
    }

    public void setCalle(String calle) {
        this.calle = calle;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(String fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNroCalle() {
        return nroCalle;
    }

    public void setNroCalle(String nroCalle) {
        this.nroCalle = nroCalle;
    }

    public int getNroDoc() {
        return nroDoc;
    }

    public void setNroDoc(int nroDoc) {
        this.nroDoc = nroDoc;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public ArrayList<Telefono> getTelefonos() {
        return telefonos;
    }

    public void setTelefonos(ArrayList<Telefono> telefonos) {
        this.telefonos = telefonos;
    }

    public TipoDoc getTipoDoc() {
        return tipoDoc;
    }

    public void setTipoDoc(TipoDoc tipoDoc) {
        this.tipoDoc = tipoDoc;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public ArrayList<Telefono> traerTelefonos() {
        ArrayList<Telefono> telefono = new ArrayList<Telefono>();
        int numero;
        String tipo;
        AccesoADatos acceso = new AccesoADatos();
        ResultSet rs = acceso.leer("select t.numero as numero, t.tipo as tipo from telefono t, persona p where p.nombreTipoDoc=" + this.getTipoDoc().getNombre() + " and p.nroDoc=" + this.getNroDoc() + " and p.nombreTipoDoc=t.nombreTipoDoc and p.nroDoc=t.nroDoc");
        try {
            do {
                numero = rs.getInt("numero");
                tipo = rs.getString("tipo");
                Telefono tel = new Telefono(tipo, numero);
                telefono.add(tel);
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
        return telefono;
    }

    public Barrio traerBarrio() {
        Barrio barrio2 = null;
        Provincia provincia;
        Localidad localidad;
        AccesoADatos acceso = new AccesoADatos();
        ResultSet rs = acceso.leer("select b.nombreBarrio as nombreBarrio, b.nombreLocalidad as nombreLocalidad, b.descripcion as descripcion, b.nombreProvincia as nombreProvincia from barrio b, persona p where p.nombreTipoDoc=" + this.getTipoDoc().getNombre() + " and p.nroDoc=" + this.getNroDoc() + " and p.nombreBarrio=b.nombreBarrio and p..nombreLocalidad=b.nombreLocalidad and p.nombreProvincia=b.nombreProvincia");
        try {
            do {
                provincia = new Provincia(rs.getString("nombreProvincia"));
                localidad = new Localidad(rs.getString("nombreLocalidad"), provincia);
                barrio2 = new Barrio(rs.getString("nombreBarrio"), localidad, rs.getString("descripcion"));
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
        return barrio2;
    }

    public Usuario traerUsuario() {
        Usuario u = null;
        String nombreUsuario;
        String password;
        boolean activo;
        AccesoADatos acceso = new AccesoADatos();
        ResultSet rs = acceso.leer("select u.nombreUsuario as nombreUsuario, u.password as password, u.activo as activo from usuario u, persona p where p.nombreTipoDoc=" + this.getTipoDoc().getNombre() + " and p.nroDoc=" + this.getNroDoc());
        try {
            do {
                nombreUsuario = rs.getString("nombreUsuario");
                password = rs.getString("password");
                if (rs.getInt("activo") == 1) {
                    activo = true;
                } else {
                    activo = false;
                }
                u = new Usuario(nombreUsuario, password, activo);
            } while (rs.next());
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }

        return u;
    }

    public boolean insertarPersona() {
        AccesoADatos acceso = new AccesoADatos();
        for (int i = 0; i < this.getTelefonos().size(); i++) {
            this.getTelefonos().get(i).insertarTelefono(this.getTipoDoc().getNombre(), this.getNroDoc(), "");
        }
        acceso.insertar("insert into barrio (nombreLocalidad, descripcion, nombreProvincia) values ('"+this.getBarrio().getLocalidad().getNombre()+"', '"+this.getBarrio().getDescripcion()+"', '"+this.getBarrio().getLocalidad().getProvincia().getNombre()+"')");
        acceso.insertar("insert into usuario (nombreUsuario, password, activo) values ('" + this.getUsuario().getNombre() + "', '" + this.getUsuario().getContraseña() + "', '1')");
        String consulta = "insert into persona (nombreTipoDoc, nroDoc, nombrePersona, apellido, estadoCivil, calle, nroCalle, sexo, nombreBarrio, nombreLocalidad, nombreProvincia, fechaNac, email, usuario) ";
        consulta += "values ('" + this.getTipoDoc().getNombre() + "', '" + this.getNroDoc() + "', '" + this.getNombre() + "', '" + this.getApellido() + "', '" + this.getEstadoCivil() + "', '" + this.getCalle() + "', '" + this.getNroCalle() + "', '" + this.getSexo() + "', '" + this.getBarrio().getNombre() + "', '" + this.getBarrio().getLocalidad().getNombre() + "', '" + this.getBarrio().getLocalidad().getProvincia().getNombre() + "', '" + this.getFechaNacimiento() + "', '" + this.getEmail() + "', '" + this.getUsuario().getNombre() + "')";
        return acceso.insertar(consulta);
    }
    
//    public boolean insertarPersona(Persona p){
//    AccesoADatos acceso = new AccesoADatos();
//
//
//    String sql="insert into Persona values ('"+p.getTipoDoc().getNombre()+"',"+p.getNroDoc()+",'"+ p.getNombre()+"','"+p.getApellido()+"',";
//        sql+=" '"+p.getEstadoCivil()+"','"+p.getCalle()+"',"+ p.getNroCalle()+",'"+p.getSexo()+"','"+p.getBarrio().getNombre()+"','"+p.getBarrio().getLocalidad().getNombre()+"','"+p.getBarrio().getLocalidad().getProvincia().getNombre()+"','"+p.getEmail()+"','"+p.getFechaNacimiento()+"')";
//        acceso.insertar(sql);
//        System.out.println(sql);
//        return true;
//
//    }
}
